JAVA開發(fā)常用的性能優(yōu)化有哪些?
JAVA開發(fā)常用的性能優(yōu)化有哪些? 沒有系統(tǒng)地整理過,就說一些常見的吧,想到什么說什么,有一些關(guān)于代碼細(xì)節(jié),有些可能是一些方法和習(xí)慣。
-
避免過多地創(chuàng)建Java對(duì)象:比如在循環(huán)中創(chuàng)建對(duì)象,創(chuàng)建和回收都需要花費(fèi)時(shí)間;
-
盡量使用局部變量,或者換一句換說,要根據(jù)變量的作用域,把變量定義在合適的地方;
-
盡量減少計(jì)算/操作:這里其實(shí)要注意的點(diǎn)很多,一個(gè)簡單的例子,入?yún)⒔o了10個(gè)ID去查詢數(shù)據(jù)庫,是循環(huán)10遍執(zhí)行where id=?,還是執(zhí)行1遍where id in(list);
-
使用StringBuffer、Collection的時(shí)候,如果能夠確認(rèn)長度/元素?cái)?shù)量的話,盡量指定長度/元素?cái)?shù)量;因?yàn)槟J(rèn)值是比較小的,當(dāng)它們在做擴(kuò)展的時(shí)候,會(huì)有一定性能損耗;
-
基本數(shù)據(jù)類型轉(zhuǎn)為字符串,用toString()而不是+"";

-
在finally塊中關(guān)閉Stream,要養(yǎng)成好習(xí)慣;
-
盡量少使用正則表達(dá)式;非要用的話,盡量把Pattern緩存下來;
-
如果要多線程處理,請使用線程池;
-
如果不是必須,用HashMap、ArrayList,而不是HashTable、Vector;根據(jù)需要選擇使用ArrayList還是LinkedList,反正我一般都是用ArrayList;
-
在必要的時(shí)候捕捉異常,并且不要通過異常控制代碼邏輯和業(yè)務(wù)流程;

-
一些在數(shù)據(jù)庫中的配置參數(shù)(不會(huì)經(jīng)常變化),可以在項(xiàng)目啟動(dòng)的時(shí)候或第一次使用的時(shí)候,從數(shù)據(jù)庫中查詢出來,放到內(nèi)存或緩存中;不要每次用的時(shí)候都去數(shù)據(jù)庫里面查一遍;
-
接上條,盡量使用懶加載,也就是項(xiàng)目啟動(dòng)的時(shí)候創(chuàng)建or第一次使用的時(shí)候創(chuàng)建,選擇后者;
-
有些開發(fā)人員喜歡用HashMap放一些緩存數(shù)據(jù),不如直接使用開源的緩存框架,他們會(huì)做的更好;
-
能在客戶端做的話,就不要在服務(wù)端做;能在服務(wù)端程序里面做的話,就不要在數(shù)據(jù)庫里面做;比如要做where time > sysdate-1,那么就在程序中把sysdate-1算出來,再交給SQL。

